package com.huatai.saas.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huatai.saas.dto.AuthSceneListQueryDto;
import com.huatai.saas.dto.AuthSceneUserDto;
import com.huatai.saas.dto.BackFileListQueryDto;
import com.huatai.saas.dto.SceneFileDto;
import com.huatai.saas.entity.SceneFileEntity;
import com.huatai.saas.vo.*;

import java.util.List;

/**
* @author hecai
* @description 针对表【scene_file(场景列表)】的数据库操作Service
* @createDate 2024-04-28 10:02:00
*/
public interface SceneFileService extends IService<SceneFileEntity> {

	/**
	 * 保存或更新场景
	 * @param dto
	 * @return
	 */
	void saveOrUpdateSceneFile(SceneFileEntity sceneFileEntity);

	/**
	 * 保存场景
	 * @param sceneFileEntity
	 * @return
	 */
	Long saveSceneFile(SceneFileDto sceneFileEntity);

	/**
	 * 更新场景文件路径
	 * @param sceneFileEntity
	 * @return
	 */
	Boolean updateSceneFilePath(SceneFileEntity sceneFileEntity);

	/**
	 * 更新场景
	 * @param sceneFileEntity
	 * @return
	 */
	Boolean updateSceneFile(SceneFileDto sceneFileEntity);

	/**
	 * 分页获取场景列表数据
	 * @param dto
	 * @return
	 */
	IPage<SceneFileEntity> getFilePageList(BackFileListQueryDto dto);

	/**
	 * 收藏场景
	 * @param id
	 * @return
	 */
	Boolean collectSceneFile(Long id);

	/**
	 * 取消收藏场景
	 * @param id
	 * @return
	 */
	Boolean cancelCollectSceneFile(Long id);

	/**
	 * 删除场景
	 * @param ids
	 */
	void delFileListByIds(List<Long> ids);

	/**
	 * 获取场景历史版本
	 * @param id
	 * @return
	 */
	List<SceneFileHistoryInfoVo> getSceneFileHistoryList(Long id);

	/**
	 * 获取用户被授权的场景列表
	 * @param dto
	 * @return
	 */
	IPage<SceneFileAuthUserVo> getPageSceneListByUserId(BackFileListQueryDto dto);

	/**
	 * 获取用户收藏的场景列表
	 * @param dto
	 * @return
	 */
	IPage<SceneFileCollectUserVo> getPageSceneCollectListByUserId(BackFileListQueryDto dto);

	/**
	 *根据用户id  获取场景列表，并判断场景是否被授权
	 * @param dto
	 * @return
	 */
	IPage<SceneFileAuthInfoVo> getIsAuthPageData(AuthSceneListQueryDto dto);

	/**
	 *根据用户id获取用户已授权列表
	 * @param dto
	 * @return
	 */
	IPage<SceneFileAuthInfoVo> getByUserIdPageData(AuthSceneListQueryDto dto);

	/**
	 * 用户端获取场景列表
	 * @param dto
	 * @return
	 */
	IPage<SceneFileAuthInfoVo> getCollectPageData(AuthSceneListQueryDto dto);

	/**
	 * 授权用户
	 * @param dto
	 * @return
	 */
	Boolean authSceneUsers(AuthSceneUserDto dto);

	/**
	 * 客户端获取签名
	 * @param id
	 * @return
	 */
	String getSignature(Long id);

	/**
	 * UE侧判断场景是否被授权
	 * @param signature
	 * @return
	 */
	AuthorizationVO getSceneFileAuthInfo(String signature,String openId);

	/**
	 * 禁用授权用户
	 * @param id
	 * @return
	 */
	Boolean disableSceneUser(Long[] scId,Long userId);

	/**
	 * 客户端下载场景
	 * @param id
	 * @return
	 */
	void download(Long id);

	/**
	 * 运营端下载场景文件
	 * @param id
	 */
	void  downloadMessanger(Long id);

	/**
	 * 客户端下载场景
	 * @param id
	 * @return
	 */
	void downloadHistoryScene(Long id,String version);

	/**
	 * 客户端获取历史场景下载分片数量
	 * @param id
	 * @return
	 */
	Integer getFilePartHistoryNums(Long id,String version);

	/**
	 * 客户端分片下载历史场景
	 * @param id
	 * @param partIndex
	 */
	void partDowmloadHistoryScene(Long id,String version,int partIndex);

	/**
	 * 客户端分片下载场景
	 * @param id
	 * @return
	 */
	void partDowmloadScene(Long sfId,int partIndex);

	/**
	 * 获取场景文件分片数量
	 * @param sfId
	 * @return
	 */
	int getFilePartNums(Long sfId);

	/**
	 * 客户端获取场景基本信息
	 * @param sfId
	 * @return
	 */
	SceneFileEntityVo getSceneFileInfo(Long sfId) throws Exception;


	/**
	 * 客户端根据用户场景授权id获取场景基本信息
	 * @param usaId
	 * @return
	 */
	SceneFileEntityVo getClintSceneFileInfo(Long usaId);
}
